

import com.rabbitmq.client.*;


/**
 * @author 帅小伙
 * @date 2022/1/2
 * @description
 */
public class ConsumerT {
    private static final String QUEUE_NAME = "hello";


    public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();

        factory.setHost("47.96.19.90");
        factory.setUsername("mubei");
        factory.setPassword("020323");
        // 不需要关闭
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        // 为了防止报错  可以声明一个队列
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);

        System.out.println("消费者启动等待消费");

        /**
         * 消费接口
         * 队列推送消息给消费者的时候 如何消费消息
         * String consumerTag, Delivery message
         * 1.consumerTag  消费者标记
         * 2.队列传输给消费者的传递内容
         */
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            System.out.println(consumerTag);
            String message = new String(delivery.getBody());
            System.out.println("消费者接收到的消息:"+message);
            // 类似快递编号
            System.out.println(delivery.getEnvelope().getDeliveryTag());
        };
        /*
        * 取消者取消消费信息的回调接口
        * String consumerTag
        * */
        CancelCallback cancelCallback = (consumerTag) -> {
            System.out.println(consumerTag+"消费者取消消费信息");
        };
        /**
         * 消费者消费队列里参数
         * 1.消费队列
         * 2.是否采用自动应答
         * 3.推送消息给消费者的时候如何消费消息    DeliverCallback
         * 4.消费者取消消费消息的    CancelCallback cancelCallback
         * *ConsumerShutdownSignalCallback
         *
         *自动应答  true 效率比较慢
         * autoAck为false 直接关闭控制台不能消费消息
         *          true  成功消费消息
         */
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);

    }
}
